#1。读取
import pandas as pd
from pandas.core.frame import DataFrame
df=pd.read_excel(r"class02\成绩表.xlsx",'Sheet1')
df.groupby(["科目"]).mean().sort_values(["score"],ascending=False)\
.plot(kind='bar',title='科目平均分对比图')

df1=df.groupby(["科目"]).mean().sort_values(["score"],ascending=False)
print(df1)

import ch
ch.set_ch()
import matplotlib.pyplot as plt
plt.show()

print(df)
df["科目"][0]="化学"  #有警告，但实际更新了值
print(df['姓名'][0])  #
print(df['姓名',0]) 
print(df.score[0])



#2。手动创建DataFrame
import pandas as pd
import numpy as np

df1 = pd.DataFrame(np.random.randn(3, 3), index=list('abc'), columns=list('ABC'))
print(df1)

print(df1.head(2))
print(df1.tail(2))
#df1['C']['a']=5
#利用loc函数直接对元素赋新值  a是行号，C是列名
df1.loc['a','C'] = 22
#3。导出excel
df1.to_excel("导出1.xlsx")


#添加一列
df1['C']=[1,2,3]
# df6.insert(0, 'QQ', ['999','999','999','999','999','999'])
print(df1)
#添加一行
res = pd.DataFrame(columns=('lib', 'qty1', 'qty2'))
res = res.append([{'qty1':10.0}], ignore_index=True)
print(res.head())



#将成绩表分成两个表（姓名班级，姓名成绩），再合为一个表
print(df)
df_score=df[["姓名","科目","score"]]
df_class=df[["姓名","班级"]]
#去重，不加参数时按全量去重
df_class=df_class.drop_duplicates(subset=['姓名'], keep='first')
print(df_class)
#合并  join 、 merge    ,how='inner'、outer、left 、right
# df8 = df6.join(df7)
# df_join=df_score.join(df_class,on=["姓名"],how="left")   #["姓名"]也可以
#df_join=df_score.join(df_class,how="left")   #["姓名"]也可以
# join方法
# dataframe内置的join方法是一种快速合并的方法。它默认以index作为对齐的列。
df_join=pd.merge(df_score,df_class,on=["姓名"],how="left")
print(df_join.head())
print(df_score)
#查询、过滤
res1=df.loc[df["姓名"]=="张三"].loc[df["科目"]=="数学"]
print(res1)
#values
print(df.values)
print(df.score.values)
print(df.loc[0].values)
print(df.iloc[0].values) #按行号
print(df.shape)  #行列数
# 切片
print(df['姓名':'科目'])
print(df.loc[2:,'姓名':'科目'])

# 转置
print(df.T)
# 描述性统计
# 　　　　使用describe可以对数据根据列进行描述性统计。
print(df.loc[df['科目']=="数学"].describe())
print(df.loc[df['科目']=="英语"].describe())


#数乘运算使用apply。
print(df6.apply(lambda x: x * 2)) #2倍
print(df6**2) #平方

#group 统计
print(df.groupby(["姓名","班级"]).sum().sort_values(["score"],ascending=False))
df.groupby(["科目"]).mean().sort_values(["score"],ascending=False)\
.plot(kind='bar',title='科目平均分对比图')


#pivot_table 数据透视表
pivot1=pd.pivot_table(df,index=["班级","科目"],values=["score"]\
    ,aggfunc=[np.mean,len],fill_value=0)#.plot(kind='bar',title='科目平均分对比图')
print(pivot1)

#图表
df.groupby(["科目"]).mean().sort_values(["score"],ascending=False)\
.plot(kind='bar',title='科目平均分对比图')

df.groupby(["科目"]).mean().sort_values(["score"],ascending=False)\
.plot(kind='line',title='科目平均分对比图')

import ch
ch.set_ch()
import matplotlib.pyplot as plt
plt.show()